package cn.wizzer.app.user.modules.services;

import cn.wizzer.app.user.modules.models.RedPacket;
import cn.wizzer.app.user.modules.models.RedPacketRecord;
import cn.wizzer.app.user.modules.models.enums.RedPacketStatusEnum;
import cn.wizzer.app.user.modules.models.enums.RedPacketTypeEnum;
import cn.wizzer.app.user.modules.models.vo.RedPacketRecordVO;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;

import java.math.BigDecimal;
import java.util.List;

public interface RedPacketService extends BaseService<RedPacket> {

    /**
     * 发出红包
     *
     * @param userId     发送人
     * @param currencyId 币种
     * @param quantity   数量
     * @param type       类型
     * @param total      总额
     * @param wish       祝福语
     */
    RedPacket send(String userId, String currencyId, Integer quantity, RedPacketTypeEnum type, BigDecimal total, String wish);

    /**
     * 打开红包 返回抢到的红包记录
     * 如果抢过或者没有红包了，则返回空
     *
     * @param userId      打开人
     * @param redPacketId 红包ID
     */

    RedPacketRecordVO open(String userId, String redPacketId);


    /**
     * 定时任务处理过期的红包
     * 24小时过期
     * 未领取的钱需要退回钱包
     */
    void expired();


    /**
     * 后台红包列表(分页)
     *
     * @param type          Random 随机 Identical 固定
     * @param status        opening:领取中,opened:领取完，expired:已过期
     * @param keyword       关键字
     * @param searchDate    日期
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination listPage(String conditionData, String currencyId, String type, String status, String keyword, String[] searchDate, int pageNumber, int pageSize);


    /**
     * 根据搜索条件查询
     *
     * @param conditionData
     * @param currencyId
     * @param type
     * @param status
     * @param keyword
     * @param searchDate
     * @return
     */
    BigDecimal searchSum(String conditionData, String currencyId, String type, String status, String keyword, String[] searchDate);
}
